이진 파일
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
이진 파일은 바이트 시퀀스로 구성되며, 문자 외의 다른 정보로 해석되도록 설계된 파일이다. 컴파일된 프로그램, 이미지, 소리, 압축 파일 등이 이진 파일의 예시이며, 파일 형식 식별을 위한 헤더와 메타데이터를 포함하기도 한다. 이진 파일은 16진수 편집기를 통해 내용을 확인하거나 편집할 수 있으며, 텍스트 파일과 달리 사람이 직접 읽기 어렵다. 이진 파일은 특정 시스템 간의 호환성 문제, 특히 바이트 순서(엔디안) 문제에 유의해야 하며, 텍스트 파일과 비교하여 데이터 표현 방식과 처리 방식에 차이가 있다.
더 읽어볼만한 페이지
이진 파일 | |
---|---|
파일 정보 | |
![]() | |
일반 정보 | |
유형 | 컴퓨터 파일 |
인코딩 | 바이너리 형식 |
가독성 | 사람이 읽을 수 없음 |
사용 | 다양한 데이터 유형 저장 (텍스트, 이미지, 오디오, 비디오 등) |
설명 | |
정의 | 컴퓨터가 사용하기 위한 이진수 형식으로 인코딩된 파일. 특정 문자 인코딩으로 인코딩되지 않은 모든 파일. |
구성 | 비트와 바이트의 시퀀스로 구성됨. |
텍스트 파일과의 차이점 | 텍스트 파일은 사람이 읽을 수 있는 문자로 인코딩된 반면, 바이너리 파일은 그렇지 않다. 바이너리 파일은 메타데이터와 포맷팅 정보를 포함할 수 있다. |
예시 | 실행 가능한 파일 (실행 파일) 이미지 파일 (JPEG, PNG, GIF 등) 오디오 파일 (MP3, WAV 등) 비디오 파일 (MP4, AVI, MOV 등) 압축 파일 (ZIP, RAR, 7z 등) 데이터베이스 파일 |
처리 | 바이너리 파일은 사람이 직접 읽거나 편집하기 어렵다. 특정 소프트웨어나 도구를 사용하여 해석해야 한다. |
장점 | 텍스트 파일보다 더 효율적으로 데이터를 저장할 수 있다. 더 복잡한 데이터 구조를 표현할 수 있다. |
단점 | 사람이 읽기 어렵다. 특정 시스템이나 아키텍처에 종속될 수 있다. |
추가 정보 | |
관련 용어 | 텍스트 파일 ASCII 유니코드 컴퓨터 프로그램 |
2. 구조
이진 파일은 일반적으로 바이트(8개의 비트로 구성)의 시퀀스로 간주되며, 문자가 아닌 다른 데이터(예: 컴파일된 컴퓨터 프로그램, 이미지, 소리, 압축된 파일 등)를 포함할 수 있다.[1]
일부 이진 파일은 헤더(메타데이터 블록)를 포함하여 파일 형식과 구조를 식별하는 데 사용되는 정보를 저장한다. 이진 파일에 헤더가 없으면 플랫 이진 파일이라고 한다.
이진 파일은 Base64와 같은 인코딩 방식을 사용하여 텍스트 형태로 변환될 수 있다. 이는 네트워크를 통해 전송하거나 웹사이트 인증서와 같이 특정 시스템에서 사용하기 위해 필요하다.
이진 파일은 컴퓨터가 직접 처리할 수 있는 포맷으로 되어 있어, 사람이 읽기에는 어렵다. 바이너리 에디터를 사용하면 이진 파일의 내용을 16진수로 표시하고 편집할 수 있다.
C 언어의 파일 스트림과 같이 처리 시스템에 따라 텍스트 모드와 이진 모드에서 줄 바꿈 문자의 처리가 다를 수 있다.[4] C++의 스트림은 기본적으로 텍스트 모드이지만 이진 모드를 지정할 수도 있다.[5]
2. 1. 헤더 (컴퓨팅)
일부 이진 파일은 파일의 데이터를 해석하기 위해 헤더, 메타데이터 블록을 포함한다. 헤더는 종종 형식을 식별할 수 있는 시그니처 또는 '매직' 넘버를 포함한다.[1] 예를 들어, GIF 파일은 여러 이미지를 포함할 수 있으며, 헤더는 각 이미지 데이터 블록을 식별하고 설명하는 데 사용된다. 헤더의 선두 바이트에는 `GIF87a` 또는 `GIF89a`와 같은 텍스트가 포함되어 이진 파일을 GIF 파일로 식별할 수 있다. 이진 파일에 헤더가 없는 경우 '''플랫 이진 파일'''이라고 할 수 있다.2. 2. 플랫 이진 파일
헤더가 없는 이진 파일을 '''플랫 이진 파일'''이라고 한다.3. 조작 및 처리
16진수 편집기(바이너리 에디터)를 사용하면 이진 파일의 내용을 16진수, 10진수, 2진수 또는 ASCII 문자 값으로 보고 편집할 수 있다.[2] 텍스트 편집기에서 이진 파일을 열면 각 8비트 그룹이 일반적으로 단일 문자로 변환되어, 사람이 읽을 수 없는 문자들의 나열이 나타난다. 특수한 뷰어('단어 추출기')를 사용하면 사람이 읽을 수 있는 텍스트만 추출할 수 있다.[2]
C, C++ 등의 프로그래밍 언어에서는 파일을 텍스트 모드 또는 이진 모드로 열 수 있다. 이는 시스템이 C/C++ "줄 끝" 문자(ASCII 줄 바꿈 문자)와 윈도우가 파일에서 예상하는 줄 끝 시퀀스(캐리지 리턴 및 줄 바꿈 문자의 순서) 간에 변환하는 방식에 영향을 미친다. 유닉스 계열 시스템에서는 줄 끝 시퀀스가 C/C++ 줄 끝 문자와 같으므로 이러한 차이가 무시될 수 있다.[4][5]
특정 시스템에서 모든 데이터 값을 허용하지 않는 이진 파일을 전송하기 위해, Base64와 같이 텍스트 형태로 변환하는 경우가 많다. 그러나 이 경우 파일 크기가 증가하고(예: Base64 사용 시 약 30% 증가) 수신 후 다시 이진수로 변환해야 하는 단점이 있다.
4. 이진 파일의 예시
이미지 파일(예: GIF, PNM)이나 오디오 파일, 압축된 파일 등에는 바이너리가 사용되는 경우가 많다.[1] 텍스트는 바이너리에 비해 데이터량이 증가하기 쉽고, 오차를 원래 포함하는 부동 소수점 수를 10진수 문자열로 변환하면 정확하게 표현할 수 없으며, 파일을 읽을 때 완전히 복원할 수 없는 경우가 있기 때문이다.
컴파일된 컴퓨터 프로그램은 이진 파일의 전형적인 예시이며, 오브젝트 파일이나 실행 파일 등이 이에 해당한다. 실제로 컴파일된 응용 프로그램은 프로그래머에 의해 '''이진 파일'''이라고도 불린다.[1]
프로프리에터리 소프트웨어는 바이너리 형태로 제공되지만, 특히 상용 소프트웨어는 타인에 의한 해석(리버스 엔지니어링)이나 개변, 개찬, 크래킹을 방지하기 위해, 리소스 파일이나 미디어 파일, 라이선스 파일 등의 일부가 더욱 난독화나 암호화가 적용된 상태로 제공되는 경우가 많다.
5. 해석 및 호환성
아스키 문자 집합으로 해석된 이진 파일은 텍스트를 표시한다. 그러나 맞춤형 애플리케이션은 파일을 다르게 해석할 수 있는데, 바이트는 소리, 픽셀, 또는 전체 단어가 될 수도 있다. 이진 데이터는 실행된 알고리즘이 각 비트, 바이트, 단어 또는 블록으로 무엇을 해야 하는지 정의하기 전까지는 의미가 없다. 따라서 이진 데이터를 단순히 검사하고 알려진 형식과 일치시키려고 시도하면 실제로 무엇을 나타내는지에 대한 잘못된 결론을 내릴 수 있다. 이 점은 스테가노그래피에 사용될 수 있는데, 알고리즘 없이는 숨겨진 콘텐츠가 있는지 알 수 없다.
이진 호환되는 두 파일은 파일의 데이터 부분에 동일한 0과 1의 시퀀스를 갖지만, 파일 헤더는 다를 수 있다.[3] 이 용어는 일반적으로 한 응용 프로그램에서 생성된 데이터 파일이 다른 응용 프로그램에서 생성된 데이터 파일과 정확히 동일하다는 것을 나타내기 위해 사용된다. 예를 들어, 일부 소프트웨어 회사는 Windows 및 Macintosh용 애플리케이션을 제작하는데, 이는 이진 호환성을 의미하며, Windows 환경에서 생성된 파일이 Macintosh에서 생성된 파일과 상호 교환될 수 있음을 의미한다.
서로 다른 컴퓨터 간의 가능한 이진 호환성 문제 중 하나는 컴퓨터의 바이트 순서이다. 일부 컴퓨터는 파일의 바이트를 다른 순서로 저장한다.[3]
이미지 파일이나 오디오 파일, 압축된 파일 등에는 바이너리가 사용되는 경우가 많다. 텍스트는 바이너리에 비해 데이터량이 증가하기 쉽고, 오차를 원래 포함하는 부동 소수점 수를 10진수 문자열로 변환하면 정확하게 표현할 수 없으며, 파일을 읽을 때 완전히 복원할 수 없는 경우가 있기 때문이다.
바이너리 파일 중에는 파일의 처음에 메타 정보(헤더)를 가지고 있는 것이 있다. 예를 들어 Graphics Interchange Format(GIF) 파일은 여러 개의 이미지를 가질 수 있으며, 파일의 처음에 각 이미지를 구별하는 정보가 기술되어 있다. 그러한 메타 정보를 가지지 않는 파일은 플랫 바이너리 파일이라고 불린다.
이진 형식에서는 엔디안 등 호환성 및 이식성 측면에서 주의가 필요하며, 이를 피하기 위해 텍스트 형식으로 기록하는 경우도 적지 않다. 자바나 .NET과 같은 표준화된 환경에서는 일반적으로 부호 있는 정수의 내부 표현에 2의 보수를 채택하고, IEEE 754에 준거하는 부동 소수점 수를 채택하도록 규정된 시스템이나 플랫폼이 많지만, 그렇지 않은 환경과의 데이터 교환에는 이진 형식이 적합하지 않다.
6. 이진 파일과 텍스트 파일
텍스트 파일은 엄밀히 말하면 이진 파일의 일종이지만, 문자 코드로 인코딩된 데이터를 디코딩하여 문자열로 변환할 수 있다는 점에서 구별된다.[4] 데이터 종류를 구분하기 위해 이진 파일과 텍스트 파일을 대조하여 사용하는 경우가 많다.[4] 텍스트 파일은 바이너리에 비해 데이터량이 증가하기 쉽고, 부동 소수점 수를 10진수 문자열로 변환할 때 정확하게 표현할 수 없어 파일을 읽을 때 완전히 복원할 수 없는 경우가 있다.[6]
예를 들어, PNM 이미지 형식에서 P1/P2/P3처럼 ASCII 텍스트를 사용하는 경우가 있지만, 바이너리 형식인 P4/P5/P6에 비해 데이터량이 증가한다. 바이너리라면 8비트(1옥테트, ≒1바이트)로 충분한 0부터 255까지의 범위의 데이터라도, 텍스트라면 10진수 표기의 가변 길이 문자열로 표현하는 경우 최대 3문자가 필요하며, 인접 데이터와의 경계를 나타내는 구분 문자까지 포함하면 4문자가 필요하다. 16진수 표기의 고정 길이 문자열로 표현하는 경우에도 2문자가 필요하므로, 8비트 단위로 인코딩해도 16비트(2옥테트, ≒2바이트)가 필요하다.
마이크로소프트 윈도우와 C, C++의 표준 라이브러리는 프로그래머가 파일을 열 때 파일이 일반 텍스트인지 이진 파일인지 지정할 수 있도록 한다. 이는 C/C++ "줄 끝" 문자(ASCII 줄 바꿈 문자)와 윈도우에서 예상하는 줄 끝 시퀀스(ASCII 캐리지 리턴 및 줄 바꿈 문자의 순서) 간의 변환에 영향을 주어, 파일을 읽고 쓸 때 표준 라이브러리 호출에 영향을 미친다. 유닉스 계열 시스템의 C, C++ 표준 라이브러리도 프로그래머가 텍스트/이진 파일 여부를 지정할 수 있지만, 유닉스 계열 시스템의 줄 끝 시퀀스가 C/C++ 줄 끝 문자와 같으므로 라이브러리는 해당 매개변수를 무시한다.
7. 주의점
이진 형식은 엔디안 등 호환성 및 이식성 측면에서 주의가 필요하며, 이를 피하기 위해 텍스트 형식으로 기록하는 경우도 적지 않다. 자바나 .NET과 같은 표준화된 환경에서는 일반적으로 부호 있는 정수의 내부 표현에 2의 보수를 채택하고, IEEE 754에 준거하는 부동 소수점 수를 채택하도록 규정되어 있지만, 그렇지 않은 환경과의 데이터 교환에는 이진 형식이 적합하지 않다. 또한, 부동 소수점 수의 오차 등 텍스트 형식에도 주의해야 할 점이 많다.
2바이트 이상의 수치형이나, 고정 길이 배열에 의한 널 종료 문자열 등을 멤버로 갖는 구조체를 이진 형식으로 그대로 직렬화하는 경우도 있지만, 처리계나 CPU 아키텍처에 따라 기본 패딩이 다르므로, 메모리 레이아웃을 규정하는 정렬을 소스 코드상에서 명시적으로 지정해야 한다.
참조
[1]
웹사이트
Binary file definition by The Linux Information Project (LINFO)
http://www.linfo.org[...]
2017-10-12
[2]
웹사이트
Ascii vs. Binary Files
https://www.cs.umd.e[...]
2017-10-12
[3]
웹사이트
NCL: Reading binary data
https://web.archive.[...]
2017-10-12
[4]
웹사이트
FIO14-C. ファイルストリームにおけるテキストモードとバイナリモードの違いを理解する
https://www.jpcert.o[...]
[5]
웹사이트
ios_base::openmode - cpprefjp C++日本語リファレンス
https://cpprefjp.git[...]
[6]
웹사이트
ソケットプログラミング HOWTO — Python 3.6.15 ドキュメント
https://docs.python.[...]
[7]
웹인용
Binary file definition by The Linux Information Project (LINFO)
http://www.linfo.org[...]
2017-10-12
[8]
웹인용
Ascii vs. Binary Files
https://www.cs.umd.e[...]
2017-10-12
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com